package com.sg.dto.biz.app.common;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * @desc MidTopPlanConstrTaskBudgetDto
 * @使用场景
 */
@Data
public class MidTopPlanConstrTaskBudgetDto
        extends BaseDto
        implements Serializable {

    /**
     * 被评对象目标周期ID
     */
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;

    /**
     * 被评对象目标周期标识
     */
    @ApiModelProperty("被评对象目标周期标识")
    private String evaObjTargetCycleCode;

    /**
     * 上级被评对象目标周期标识
     */
    @ApiModelProperty("上级被评对象目标周期标识")
    private String parentEvaObjTargetCycleId;

    /**
     * 目标周期简称
     */
    @ApiModelProperty("目标周期简称")
    private String cyclelAlias;

    /**
     * 被评对象内容表主键ID
     */
    @ApiModelProperty("被评对象内容表主键ID")
    private String evaObjEntityId;

    /**
     * 被评对象类型编码 EVA_PORTRAIT:评价画像 EVA_OBJECT:评价对象 FLEVEL_OBJ_TASK_DUTY_DEPT:一级部门目标任务责任部门 OKR_SUBJECT_DEPT:OKR责任主体部门 OKR_SUBJECT_PERSONAL:OKR责任主体个人
     */
    @ApiModelProperty("被评对象类型编码")
    private String evaObjTypeCode;

    /**
     * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
     */
    @ApiModelProperty("关联目标内容类型编码")
    private String targetCycleContentTypeCode;

    /**
     * 关联目标内容ID
     */
    @ApiModelProperty("关联目标内容ID")
    private String targetCycleContentId;

    /**
     * 周期ID
     */
    @ApiModelProperty("周期ID")
    private String cycleId;

    /**
     * 周期名称
     */
    @ApiModelProperty("周期名称")
    private String cycleStandardName;

    /**
     * 冗余目标ID
     */
    @ApiModelProperty("冗余目标ID")
    private String targetId;

    /**
     * 冗余评价模板ID
     */
    @ApiModelProperty("冗余评价模板ID")
    private String evaluationTemplateId;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;

    /**
     * 资金来源ID
     */
    @ApiModelProperty("资金来源ID")
    private String capitalSourceId;

    /**
     * 预算金额
     */
    @ApiModelProperty("预算金额")
    private Double budget;

    /**
     * 预算金额单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份 %:%
     */
    @ApiModelProperty("预算金额单位")
    private String budgetUnit;

    /**
     * 相对上级排序
     */
    @ApiModelProperty("相对上级排序")
    private Long relativeOrderNumber;

    /**
     * 部门排序
     */
    @ApiModelProperty("部门排序")
    private Long dutyBodyOrderNum;

    /**
     * 个人排序
     */
    @ApiModelProperty("个人排序")
    private Long personalOrderNumber;

    /**
     * 权重排序
     */
    @ApiModelProperty("权重排序")
    private Long weightOrderNumber;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 操作时间
     */
    @ApiModelProperty("操作时间")
    private Date operateTime;

    /**
     * 评价模板创建时间排序
     */
    @ApiModelProperty("评价模板创建时间排序")
    private Date sortCreateTime;
    /**
     * 来源预算金额占比
     */
    @ApiModelProperty("来源预算金额占比")
    private Double sourceBudgetFundsProp;

    /**
     * 来源预算金额占比单位
     */
    @ApiModelProperty("来源预算金额占比单位")
    private String sourceBudgetFundsPropUnit;

    /**
     * 目标周期预算金额占比
     */
    @ApiModelProperty("目标周期预算金额占比")
    private Double targetCycleBudgetFundsProp;

    /**
     * 目标周期预算金额占比单位
     */
    @ApiModelProperty("目标周期预算金额占比单位")
    private String targetCycleBudgetFundsPropUnit;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        MidTopPlanConstrTaskBudgetDto that = (MidTopPlanConstrTaskBudgetDto) o;
        return evaObjTargetCycleId == that.evaObjTargetCycleId && evaObjTargetCycleCode == that.evaObjTargetCycleCode && parentEvaObjTargetCycleId == that.parentEvaObjTargetCycleId && cyclelAlias == that.cyclelAlias && evaObjEntityId == that.evaObjEntityId && evaObjTypeCode == that.evaObjTypeCode && targetCycleContentTypeCode == that.targetCycleContentTypeCode && targetCycleContentId == that.targetCycleContentId && cycleId == that.cycleId && cycleStandardName == that.cycleStandardName && targetId == that.targetId && evaluationTemplateId == that.evaluationTemplateId && subjectLifeCycle == that.subjectLifeCycle && capitalSourceId == that.capitalSourceId && budget == that.budget && budgetUnit == that.budgetUnit && relativeOrderNumber == that.relativeOrderNumber && dutyBodyOrderNum == that.dutyBodyOrderNum && personalOrderNumber == that.personalOrderNumber && weightOrderNumber == that.weightOrderNumber && createTime == that.createTime && operateTime == that.operateTime && sortCreateTime == that.sortCreateTime && sourceBudgetFundsProp == that.sourceBudgetFundsProp && sourceBudgetFundsPropUnit == that.sourceBudgetFundsPropUnit && targetCycleBudgetFundsProp == that.targetCycleBudgetFundsProp && targetCycleBudgetFundsPropUnit == that.targetCycleBudgetFundsPropUnit;
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), evaObjTargetCycleId, evaObjTargetCycleCode, parentEvaObjTargetCycleId, cyclelAlias, evaObjEntityId, evaObjTypeCode, targetCycleContentTypeCode, targetCycleContentId, cycleId, cycleStandardName, targetId, evaluationTemplateId, subjectLifeCycle, capitalSourceId, budget, budgetUnit, relativeOrderNumber, dutyBodyOrderNum, personalOrderNumber, weightOrderNumber, createTime, operateTime, sortCreateTime, sourceBudgetFundsProp, sourceBudgetFundsPropUnit, targetCycleBudgetFundsProp, targetCycleBudgetFundsPropUnit);
    }

}
